%module (package="TestCppLib", directors="1") TestCppLibPackage

%{
#ifdef WNT
#pragma warning(disable : 4716)
#endif
%}

%include Common.i
%include arrays_csharp.i
%import Std.i
%include <std_wstring.i>

%{
#include "../TestCppLib/TestCppLib.h"/
%}

class  Vec3d
{
public:
	Vec3d();
	Vec3d(double x, double y, double z);

public:
	double X() const ;
	void X(double val) ;
	double Y() const;
	void Y(double val) ;
	double Z() const;
	void Z(double val) ;

	std::string ToString() const;
};

template<class T>
class Vector
{
public:
	void Add(const T& t);
	size_t Size() const ;
	const T& Get(size_t index) const;
	void Set(size_t index, const T& t);
};

class Entity
{
public:
	Entity();

	int Id() const;
	void Id(int val);

	const std::string& Name() const;
	void Name(const std::string& val) ;
	const std::wstring& GroupName() const;
	void GroupName(const std::wstring& val);

	void* Ptr() const;
};
class Line : public Entity
{
public:
	Line();
	Line(const Vec3d& start, const Vec3d& end);
public:
	Vec3d Start() const;
	void Start(Vec3d val);
	Vec3d End() const;
	void End(Vec3d val);
};
class LineStrings : public Entity
{
public:
	LineStrings();
	LineStrings(const Vector<Vec3d>& points);
public:
	const Vector<Vec3d>& Points() ;
	void Points(const Vector<Vec3d>& val);
};

%template(Vec3dVector) Vector<Vec3d>;